package zijie;

import java.util.HashMap;

/*
给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
 */
public class LengthOfLongestSubstring_3_4 {

    /**
     * 滑动窗口
     * @param s
     * @return
     */
    public static int lengthOfLongestSubstring(String s) {
        if(s == null || s.length() == 0) return 0;
        HashMap<String,Integer> mem = new HashMap<>();
        int res = 0;
        int l = 0;
        int r = 0;

        while (r < s.length() && l <= r){
            String cr = String.valueOf(s.charAt(r));
            mem.put(cr,mem.getOrDefault(cr,0)+1);
            while (mem.get(cr) > 1){
                String cl = String.valueOf(s.charAt(l));
                mem.put(cl,mem.get(cl) - 1);
                l++;
            }
            r++;
            res = Math.max(res, r - l);
        }
        return res;
    }
    public static int lengthOfLongestSubstring2(String s) {
        if(s == null || s.length() == 0) return 0;
        HashMap<Character,Integer> hashMap = new HashMap<>();
        int res = 0;
        int l = 0;
        int r = 0;
        while (r < s.length() && l <= r){
            hashMap.put(s.charAt(r),hashMap.getOrDefault(s.charAt(r),0) + 1);
            while (hashMap.get(s.charAt(r)) > 1){
                hashMap.put(s.charAt(l),hashMap.get(s.charAt(l)) - 1);
                l++;
            }
            r++;
            res=  Math.max(res,r - l);

        }
        return res;
    }

    public static void main(String[] args) {
        int pwwkew = lengthOfLongestSubstring("pwwkew");
        System.out.println(1);
    }
}
